#ifndef EPARKING_SQLITE_H
#define EPARKING_SQLITE_H

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDateTime>
#include <QVariantMap>
#include <QSqlRecord>
#include <QList>
#include <QDebug>

class EParkingSqlite
{
public:
    explicit EParkingSqlite(const QString& dbName = "eparking.db");
    ~EParkingSqlite();

    // 数据库操作接口
    bool logVehicleEntry(const QString& plateNumber);
    //登记车辆入库
    bool logVehicleExit(const QString& plateNumber, double bill);
    //登记车辆出库+收费
    bool addInternalVehicle(const QString& plateNumber,
                            const QDateTime& from, const QDateTime& to);
    //增加内部车辆
    bool isInternalVehicleValid(const QString& plateNumber);
    //内部车辆是否有效
    bool isInternalVehicle(const QString& plateNumber);
    //是否为内部车辆
    bool isVehicleInParking(const QString& plateNumber);
    //删除内部车辆
    bool removeInternalVehicle(const QString& plateNumber);
    //获得内部车辆数目
    int getCurrentInnerCarCount();
    //获得内部车辆列表
    QList<QVariantMap> getInternalCar();
    //是否已停在车库内
    int getCurrentParkingCount();
    //获取车库内车辆数目
    double getTodayEarnings();
    //获取今日收费总述
    QString getStatusText();
    //获取状态文本：今日供XX辆车，多少钱……


    // 获取车辆入场时间
    QDateTime getEntryTime(const QString& plateNumber);


    bool checkDatabase();

    QList<QString> getCurrentParkingList();
    //获得库内车牌列表
    QList<QVariantMap> getParkingRecords(int limit = 100, const QString& plateKeyword = "");
    //获得查询记录

    QSqlDatabase getDatabase();
private:
    QSqlDatabase db;
};

#endif // EPARKING_SQLITE_H
